home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Cream of the Crop 1
/
Cream of the Crop 1.iso
/
PROGRAM
/
PCL4C33.ARJ
/
MODEM_IO.C
< prev
next >
Wrap
Text File
|
1992-08-01
|
3KB
|
105 lines
/*** MODEM_IO.C ***/
#include <stdio.h>
#include "pcl4c.h"
#include "ascii.h"
#define FALSE 0
#define TRUE !FALSE
#define SECONDS 18
/*** send string to modem & get echo ***/
int SendTo(Port,String)
int Port; /* port to talk to */
char *String; /* string to send to mdoem */
{int i;
char c;
int Code;
SioRxFlush(Port);
SioDelay(SECONDS/4);
for(i=0;i<strlen(String);i++)
{/* User BREAK ? */
if(BreakTest()) return(FALSE);
/* fetch character */
c = toupper( String[i] );
switch(c)
{case '!':
/* replace ! with carriage return */
c = CR;
break;
case '~':
/* delay 1/2 second */
SioDelay(SECONDS/2);
c = ' ';
break;
case ' ':
/* delay 1/4 second */
SioDelay(SECONDS/4);
break;
} /* end switch */
/* transmit as 7 bit character */
PutChar(Port,(char)(0x7f & c));
/* delay 3/18th of a second */
SioDelay(3);
/* wait up to 1 second for the echo */
Code = GetChar(Port,SECONDS);
if(Code>0) SioCrtWrite((char)Code);
}
return(TRUE);
} /* end SendTo */
/*** wait for incoming string from modem ***/
int WaitFor(Port,String)
int Port; /* Port to talk to */
char *String; /* string to wait for */
{int i, k;
char c;
int Code;
SioCrtWrite(LF);
/* flush leading LFs and CRs */
while(1)
{/* User BREAK ? */
if(BreakTest()) return(FALSE);
/* get next incoming character */
Code = GetChar(Port,2*SECONDS);
/* printf("{\n%x}",Code); */
if(Code==-1) break;
/* skip any leading CR or LF */
if(((char)Code!=LF)&&((char)Code!=CR))
{/* stuff character back & break out of loop */
SioUnGetc(Port,(char)Code);
break;
}
SioDelay(SECONDS/5);
}
/* wait for string */
for(i=0;i<strlen(String);i++)
{/* User BREAK ? */
if(BreakTest()) return(FALSE);
c = String[i];
/* wait up to 1 second for next character */
Code = GetChar(Port,SECONDS);
/* printf("(\n%x)",Code);*/
if(Code==-1) return(FALSE);
SioCrtWrite((char)Code);
if((char)Code != c)
{printf("\nExpecting %xH not %xH\n",c,Code);
return(FALSE);
}
} /* end for(i) */
/* another character ? */
Code = GetChar(Port,SECONDS);
if(Code>0) SioCrtWrite((char)Code);
return(TRUE);
} /* end WaitFor */
int BreakTest()
{/* User BREAK ? */
if(SioBrkKey())
{printf("User BREAK\n");
return(TRUE);
}
else return(FALSE);
}